package test230601;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/6/1 0:03
 * 剑指offer II 091. 粉刷房子
 * https://leetcode.cn/problems/JEj789/
 */
public class Solution01 {

    public int minCost(int[][] costs) {
        // 定义 dp[i][color] 表示 i 位置刷 color 的最小花费
        // color 取值可以是 0 1 2 分别表示红色、蓝色、绿色
        int n = costs.length; // 房子总数
        int[][] dp = new int[n + 1][3];
        for (int i = 1; i <= n; ++i) {
            dp[i][0] = Math.min(dp[i-1][1], dp[i-1][2]) + costs[i-1][0]; // 第 i 个房子刷红色的最小花费
            dp[i][1] = Math.min(dp[i-1][0], dp[i-1][2]) + costs[i-1][1]; // 第 i 个房子刷蓝色的最小花费
            dp[i][2] = Math.min(dp[i-1][0], dp[i-1][1]) + costs[i-1][2]; // 第 i 个房子刷绿色的最小花费
        }
        int minCost = Integer.MAX_VALUE; // 存储最小花费结果
        for (int i = 0; i < 3; ++i) {
            minCost = Math.min(dp[n][i], minCost);
        }
        return minCost;
    }
}
